/**
 * 联合类型
 *    通过 一个 | 连接多个类型，就叫做联合类型
 *
 * 交叉类型
 *    通过 一个 & 连接多个类型，就叫做交叉类型，取并集
 */

let msg: string | number | boolean = "19";

msg = 20;

msg = true;

let msg2: null & string;

let obj1: { name: string; age: number } & { name: string; gender: number };

obj1 = {
  name: "张三",
  age: 10,
  gender: 10,
};

function printId(id: number | string) {
  // console.log(id.toUpperCase()); // Error

  // 类型缩小
  if (typeof id === "string") {
    // In this branch, id is of type 'string'
    console.log(id.toUpperCase());
  } else {
    // Here, id is of type 'number'
    console.log(id);
  }
}

export {};
